Introduction

Summary

This report primarily concentrate on reviewing overwatch heroes and how they are/should be used.

Overwatch Player Data Source

Player data is parsed from *https://overwatchtracker.com*. Player list is parsed on August 4, 2016 and each player’s competitive play data is parsed on August 7, 2016. Each player’s data is dynamically loaded at runtime, hence prone to errors. Especially, there were zero-valued data where data cannot be zero, such as player level. Some data may have been manually deleted during parsing. Web crawler is developed with python3, and can be viewed at https://github.com/juice500ml/think_overwatch/tree/master/parse_tracker.

Overwatch from Wikipedia

Overwatch is a multiplayer first-person shooter video game developed and published by Blizzard Entertainment. It was released in May 2016 for Microsoft Windows, PlayStation 4, and Xbox One.
Overwatch puts players into two teams of six, with each player selecting one of several pre-defined hero characters with unique movement, attributes, and skills; these heroes are divided into four classes: Offense, Defense, Tank, and Support. Players on a team work together to secure and defend control points on a map and/or escort a payload across the map in a limited amount of time. The game was launched with casual play, while Blizzard added competitive ranked play about a month after launch. Copied on August 15, 2016

Overwatch Heroes


Image from https://playoverwatch.com/en-us/heroes/#all*
Copied on August 15, 2016*

Hero Classes

There are 4 hero classes in Overwatch; each role sufficient for victory.
Role summary from http://overwatch.wikia.com/wiki/Role*
Copied on August 15, 2016*

Offense

The main objective of the offense role is to scout the area, harass the opposing team, and press the objective. Heroes classified as offense generally have high damage weapons and abilities and lower health pools than tanks and some defense heroes. They are usually excellent duelists with high mobility and good burst or sustained damage. The following heroes have this role: McCree, Pharah, Reaper, Soldier: 76, Tracer and Genji.

Defense

The main objective of the defense role is to guard locations, create choke points, and establish a front. They may have long range weapons or the ability to create turrets, and excel at area denial.
The following heroes have this role: Bastion, Hanzo, Junkrat, Torbjörn, Widowmaker and Mei.

Tank

The main objective of the defense role is to guard locations, create choke points, and establish a front. They may have long range weapons or the ability to create turrets, and excel at area denial.
The following heroes have this role: Reinhardt, Roadhog, Winston, Zarya and D.Va.

Support

The objective of support is to heal, buff and provide utility. Support heroes boost the overall performance of their team by increasing their survivability, speed, and damage output. They are generally the worst duelists and are best when surrounded by teammates.
The following heroes have this role: Zenyatta, Mercy, Symmetra, Lúcio and Ana.

Heroes Overview

Overwatch Competitive Play Ratings

Ratings vary from 0 to near 90. If the player wins at competitive play, rating of the player goes up, and vice versa. It gets harder to increase rating when rating is higher, and easier when rating is lower. Tracked Players at *https://overwatchtracker.com* on August 7, 2016 were 47,267. And rating distribution as below.

dat %>%
  ggplot(aes(x=RATING)) +
  ggtitle('Overwatch Rating Counts') +
  geom_histogram(bins=30)

qqnorm(dat$RATING)
qqline(dat$RATING)

As we can more clearly see in the Q-Q plot, Overwatch rating closely follows normal distribution; presumably distributed manually by Blizzard itself.

Game Matching of Overwatch

Game matching for competitive play can be shown in a roundabout way; by showing total kils per total deaths while playing competitive match. Note that total kills/deaths has the same ratio of average kills/deaths per game.

set.seed(1608)
dat %>%
  sample_n(1000) %>%
  ggplot(aes(x=TOT_KILL, y=TOT_DEATH)) +
  geom_jitter() + 
  geom_smooth() +
  scale_x_log10() +
  scale_y_log10() +
  geom_abline() +
  ggtitle("Total Kills per Death")

cor(dat$TOT_KILL, dat$TOT_DEATH)
## [1] 0.9401023

The bias betwen kills and deaths is primarily because Support heroes tends to die a lot, and not so many people play Support heroes.

Most Appreciated Heroes

dat %>%
  filter(BEST_HERO %in% hero_atk) %>%
  ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
  geom_point(alpha=0.1) +
  geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
  xlim(20, 80) +
  ylim(0, 1) +
  ggtitle("Which offense heroes get most cards?")
## Warning: Removed 131 rows containing non-finite values (stat_smooth).
## Warning: Removed 131 rows containing missing values (geom_point).
## Warning: Removed 32 rows containing missing values (geom_path).

dat %>%
  filter(BEST_HERO %in% hero_def) %>%
  ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
  geom_point(alpha=0.1) +
  geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
  xlim(20, 80) +
  ylim(0, 1) +
  ggtitle("Which defence heroes get most cards?")
## Warning: Removed 7 rows containing non-finite values (stat_smooth).
## Warning: Removed 7 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_path).

dat %>%
  filter(BEST_HERO %in% hero_tank) %>%
  ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
  geom_point(alpha=0.1) +
  geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
  xlim(20, 80) +
  ylim(0, 1) +
  ggtitle("Which tank heroes get most cards?")
## Warning: Removed 36 rows containing non-finite values (stat_smooth).
## Warning: Removed 36 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_path).

dat %>%
  filter(BEST_HERO %in% hero_heal) %>%
  ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
  geom_point(alpha=0.1) +
  geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
  xlim(20, 80) +
  ylim(0, 1) +
  ggtitle("Which support heroes get most cards?")
## Warning: Removed 21 rows containing non-finite values (stat_smooth).
## Warning: Removed 21 rows containing missing values (geom_point).

dat %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))
  ) %>%
  ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO_CLASS)) +
  geom_point(alpha=0.1) +
  geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
  xlim(20, 80) +
  ylim(0, 1) +
  ggtitle("Which hero classes get most cards?")
## Warning: Removed 195 rows containing non-finite values (stat_smooth).
## Warning: Removed 195 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_path).

Hero Analysis

Traits that can be calculated per game is chosen.
Kills, Heals, Damages, Solo kills, Objective kills, Final blows, Environmental kills, Multiple kills, Deaths, Environmental deaths, Fire time, Objective time, Heal assistance, Defence assistance, Attack assistance.

Offense

  • Positive Traits
  • KILL_PER_GAME
    Offensive heroes should deal fine amount of damage.
  • DMG_PER_GAME
    Between Offensive heroes, Tracer, Genji and McCree’s basic attack is not so strong or consistent as Solder:76, Pharah or Reaper. How to effectively use the basic attack decides for weak basic attack heroes.
  • AVG_FIRE_TIME
    Offensive heroes should always be in fire mode, as kill streaks can easily achieve fire mode.
  • AVG_ASSIST / AVG_ATK_ASSIST / AVG_DEF_ASSIST
    Assist of Overwatch cannot be earned by Offensive heroes; as this can be earned by only supporting teammates which is on the offensive or defensive. This should be earned by another heroes, such as Support heroes.
  • AVG_OBJ_TIME
    Offense heroes should help objectives, not only getting kill streaks. Heroes should stay nearby objectives when at stable situation.
  • Negative Traits
  • AVG_SOLO_KILL
    Solo kills normally means hero has encountered one-to-one situation, and the hero got some blows from the opponent. Health packs are a rarity at the front line. Offense heroes should not push the front line too hard.
  • AVG_OBJ_KILL
    When on attacked situation on the objective, Tank heroes should be the ones who guard the objective, not Offense heroes. Offense heroes should be at the back.
  • AVG_ENV_DEATH
    Offensive heroes tends to be rapidly moving across maps. Accidental deaths by not understanding maps enough should be avoided.

Genji

hero = "Genji"
dat_each <- dat %>%
  filter(BEST_HERO == hero) %>%
    transmute(KILL_PER_GAME,
              HEAL_PER_GAME,
              DMG_PER_GAME,
              AVG_SOLO_KILL = TOT_SOLO_KILL / TOT_GAME,
              AVG_OBJ_KILL = TOT_OBJ_KILL / TOT_GAME,
              AVG_BLOW = TOT_BLOW / TOT_GAME,
              AVG_ENV_KILL = TOT_ENV_KILL / TOT_GAME,
              AVG_MUL_KILL = TOT_MUL_KILL / TOT_GAME,
              AVG_DEATH = TOT_DEATH / TOT_GAME,
              AVG_ENV_DEATH = TOT_ENV_DEATH / TOT_GAME,
              AVG_FIRE_TIME = TOT_FIRE_TIME / TOT_GAME,
              AVG_OBJ_TIME = TOT_OBJ_TIME / TOT_GAME,
              AVG_HEAL_ASSIST = TOT_HEAL_ASSIST / TOT_GAME,
              AVG_DEF_ASSIST = TOT_DEF_ASSIST / TOT_GAME,
              AVG_ATK_ASSIST = TOT_ATK_ASSIST / TOT_GAME,
              RATING)

hero_lm = lm(RATING ~ ., data = dat_each)
hero_lm %>%
  ggplot(aes(.fitted, .resid)) +
  geom_point() +
  stat_smooth(method="loess") +
  geom_hline(yintercept=0, col="red", linetype="dashed") +
  xlab("Fitted values") +
  ylab("Residuals") +
  ggtitle(paste("Residual vs Fitted Plot of Linear Model of Hero", hero, sep = " "))

print(summary(hero_lm))
## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -23.6509  -3.8760  -0.1672   4.0590  18.7348 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.875e+01  1.287e+00  22.330  < 2e-16 ***
## KILL_PER_GAME    2.027e+00  1.095e-01  18.507  < 2e-16 ***
## HEAL_PER_GAME   -2.581e+01  4.635e+01  -0.557 0.577672    
## DMG_PER_GAME     5.472e-04  1.633e-04   3.350 0.000823 ***
## AVG_SOLO_KILL   -2.888e+00  2.161e-01 -13.364  < 2e-16 ***
## AVG_OBJ_KILL    -2.649e+00  1.614e-01 -16.413  < 2e-16 ***
## AVG_BLOW        -6.622e-02  1.839e-01  -0.360 0.718881    
## AVG_ENV_KILL     3.276e+00  1.564e+00   2.095 0.036282 *  
## AVG_MUL_KILL     1.228e+00  1.083e+00   1.134 0.257111    
## AVG_DEATH       -1.240e-03  9.534e-02  -0.013 0.989627    
## AVG_ENV_DEATH   -1.265e+00  1.401e+00  -0.903 0.366517    
## AVG_FIRE_TIME    2.435e-02  6.287e-03   3.873 0.000111 ***
## AVG_OBJ_TIME     4.250e-02  1.404e-02   3.027 0.002499 ** 
## AVG_HEAL_ASSIST  2.581e+01  4.635e+01   0.557 0.577666    
## AVG_DEF_ASSIST  -1.401e-01  2.876e-01  -0.487 0.626187    
## AVG_ATK_ASSIST   2.511e+00  4.187e-01   5.997 2.37e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.838 on 2027 degrees of freedom
## Multiple R-squared:  0.6446, Adjusted R-squared:  0.642 
## F-statistic: 245.1 on 15 and 2027 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • DMG_PER_GAME
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST
  • AVG_OBJ_TIME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL

McCree

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -22.7337  -4.1281   0.1543   4.4212  17.7049 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     24.0378141  2.2799333  10.543  < 2e-16 ***
## KILL_PER_GAME    2.2269388  0.1689437  13.182  < 2e-16 ***
## HEAL_PER_GAME   -9.9926715 70.2149019  -0.142 0.886861    
## DMG_PER_GAME     0.0007508  0.0002260   3.321 0.000929 ***
## AVG_SOLO_KILL   -3.8312055  0.3332726 -11.496  < 2e-16 ***
## AVG_OBJ_KILL    -3.2067640  0.2563248 -12.511  < 2e-16 ***
## AVG_BLOW         0.2114193  0.2886800   0.732 0.464124    
## AVG_ENV_KILL    -2.3162297  2.6130790  -0.886 0.375625    
## AVG_MUL_KILL     0.6021693  1.7539054   0.343 0.731425    
## AVG_DEATH        0.4015038  0.1525980   2.631 0.008647 ** 
## AVG_ENV_DEATH   -1.4778253  2.3153192  -0.638 0.523443    
## AVG_FIRE_TIME    0.0292410  0.0109472   2.671 0.007688 ** 
## AVG_OBJ_TIME     0.0616963  0.0265548   2.323 0.020368 *  
## AVG_HEAL_ASSIST  9.9926128 70.2148926   0.142 0.886861    
## AVG_DEF_ASSIST   0.5675624  0.4287650   1.324 0.185913    
## AVG_ATK_ASSIST   1.2924148  0.5946495   2.173 0.029994 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.206 on 960 degrees of freedom
## Multiple R-squared:  0.704,  Adjusted R-squared:  0.6993 
## F-statistic: 152.2 on 15 and 960 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • DMG_PER_GAME
  • AVG_FIRE_TIME
  • AVG_DEATH
    Unusually, deaths raised the rating. From the fact that high rating players tend to use McCree often, and kills are more often at games played by high rankers, it can be deduced that this is the reason for high rate of average deaths.
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL

Pharah

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -19.4020  -3.5374  -0.1373   3.5748  17.7783 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.974e+01  7.723e-01  38.502  < 2e-16 ***
## KILL_PER_GAME    1.815e+00  6.328e-02  28.676  < 2e-16 ***
## HEAL_PER_GAME   -1.843e+01  2.942e+01  -0.626 0.531070    
## DMG_PER_GAME    -5.678e-05  8.283e-05  -0.686 0.493045    
## AVG_SOLO_KILL   -2.100e+00  1.318e-01 -15.938  < 2e-16 ***
## AVG_OBJ_KILL    -1.898e+00  9.247e-02 -20.529  < 2e-16 ***
## AVG_BLOW         5.957e-02  1.089e-01   0.547 0.584437    
## AVG_ENV_KILL     8.542e-01  3.700e-01   2.308 0.021021 *  
## AVG_MUL_KILL     2.123e+00  5.966e-01   3.559 0.000377 ***
## AVG_DEATH       -1.307e-01  5.826e-02  -2.244 0.024893 *  
## AVG_ENV_DEATH   -3.018e+00  8.646e-01  -3.491 0.000486 ***
## AVG_FIRE_TIME    6.942e-03  3.911e-03   1.775 0.075938 .  
## AVG_OBJ_TIME     6.295e-02  8.851e-03   7.112 1.32e-12 ***
## AVG_HEAL_ASSIST  1.843e+01  2.942e+01   0.626 0.531068    
## AVG_DEF_ASSIST   4.834e-01  1.567e-01   3.085 0.002048 ** 
## AVG_ATK_ASSIST   1.363e+00  2.264e-01   6.019 1.89e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.472 on 4527 degrees of freedom
## Multiple R-squared:  0.5577, Adjusted R-squared:  0.5562 
## F-statistic: 380.5 on 15 and 4527 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_MUL_KILL
    Hero speciality of Pharah can kill multiple enemies at one time. Effective usage of this skill is required for Pharah gameplay.
  • AVG_OBJ_TIME
  • AVG_DEF_ASSIST
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
    Pharah has a relatively small value compared to other offense heroes. This is because Pharah has most powerful and hard-to-sight single blow between offensive heroes.
  • AVG_ENV_DEATH

Reaper

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -26.1170  -3.6814  -0.0381   3.5470  22.0842 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.850e+01  1.025e+00  27.812  < 2e-16 ***
## KILL_PER_GAME    1.781e+00  8.392e-02  21.220  < 2e-16 ***
## HEAL_PER_GAME    1.829e+01  3.719e+01   0.492 0.622924    
## DMG_PER_GAME     1.761e-04  1.173e-04   1.501 0.133481    
## AVG_SOLO_KILL   -2.192e+00  1.728e-01 -12.690  < 2e-16 ***
## AVG_OBJ_KILL    -2.113e+00  1.197e-01 -17.649  < 2e-16 ***
## AVG_BLOW         9.344e-02  1.377e-01   0.678 0.497591    
## AVG_ENV_KILL     2.634e+00  1.099e+00   2.397 0.016585 *  
## AVG_MUL_KILL     9.674e-02  6.881e-01   0.141 0.888204    
## AVG_DEATH        1.062e-02  7.627e-02   0.139 0.889256    
## AVG_ENV_DEATH   -3.677e+00  9.789e-01  -3.756 0.000176 ***
## AVG_FIRE_TIME    1.334e-02  5.002e-03   2.667 0.007695 ** 
## AVG_OBJ_TIME     6.796e-02  1.149e-02   5.916 3.67e-09 ***
## AVG_HEAL_ASSIST -1.829e+01  3.719e+01  -0.492 0.622922    
## AVG_DEF_ASSIST   3.126e-01  2.020e-01   1.547 0.121969    
## AVG_ATK_ASSIST   1.540e+00  3.340e-01   4.611 4.18e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.691 on 3042 degrees of freedom
## Multiple R-squared:  0.5118, Adjusted R-squared:  0.5094 
## F-statistic: 212.6 on 15 and 3042 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST
  • AVG_OBJ_TIME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_DEATH

Soldier: 76

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.9769  -3.8894   0.0839   3.8463  18.8111 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.757e+01  8.532e-01  32.314  < 2e-16 ***
## KILL_PER_GAME    1.999e+00  6.876e-02  29.072  < 2e-16 ***
## HEAL_PER_GAME    1.805e+01  3.304e+01   0.546    0.585    
## DMG_PER_GAME    -4.283e-05  9.481e-05  -0.452    0.651    
## AVG_SOLO_KILL   -2.841e+00  1.722e-01 -16.499  < 2e-16 ***
## AVG_OBJ_KILL    -2.273e+00  9.300e-02 -24.437  < 2e-16 ***
## AVG_BLOW         1.787e-01  1.250e-01   1.429    0.153    
## AVG_ENV_KILL     2.064e-01  9.598e-01   0.215    0.830    
## AVG_MUL_KILL     1.185e+00  7.441e-01   1.593    0.111    
## AVG_DEATH       -5.278e-02  6.509e-02  -0.811    0.417    
## AVG_ENV_DEATH   -3.783e+00  8.753e-01  -4.323 1.58e-05 ***
## AVG_FIRE_TIME    1.905e-02  4.126e-03   4.617 4.01e-06 ***
## AVG_OBJ_TIME     7.841e-02  9.277e-03   8.452  < 2e-16 ***
## AVG_HEAL_ASSIST -1.805e+01  3.304e+01  -0.546    0.585    
## AVG_DEF_ASSIST   6.654e-01  1.627e-01   4.089 4.41e-05 ***
## AVG_ATK_ASSIST   1.394e+00  2.414e-01   5.776 8.16e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.986 on 4421 degrees of freedom
## Multiple R-squared:  0.5898, Adjusted R-squared:  0.5884 
## F-statistic: 423.8 on 15 and 4421 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST
  • AVG_DEF_ASSIST
  • AVG_OBJ_TIME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_DEATH

Tracer

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -21.4254  -3.8043   0.2109   3.8547  25.3734 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     28.2202006  1.2664240  22.283  < 2e-16 ***
## KILL_PER_GAME    1.6604121  0.1051579  15.790  < 2e-16 ***
## HEAL_PER_GAME   -8.3332135 51.6315799  -0.161 0.871800    
## DMG_PER_GAME     0.0008100  0.0001639   4.943 8.48e-07 ***
## AVG_SOLO_KILL   -2.7670542  0.2346348 -11.793  < 2e-16 ***
## AVG_OBJ_KILL    -2.5940443  0.1636807 -15.848  < 2e-16 ***
## AVG_BLOW         0.4164414  0.1927573   2.160 0.030881 *  
## AVG_ENV_KILL    -1.3153880  1.6798429  -0.783 0.433714    
## AVG_MUL_KILL     0.0981775  1.2687168   0.077 0.938328    
## AVG_DEATH       -0.0398112  0.0988310  -0.403 0.687132    
## AVG_ENV_DEATH   -5.7079981  1.4971479  -3.813 0.000143 ***
## AVG_FIRE_TIME    0.0185097  0.0067808   2.730 0.006405 ** 
## AVG_OBJ_TIME     0.0747173  0.0150966   4.949 8.21e-07 ***
## AVG_HEAL_ASSIST  8.3332194 51.6315797   0.161 0.871800    
## AVG_DEF_ASSIST   0.7024508  0.2548568   2.756 0.005911 ** 
## AVG_ATK_ASSIST   0.9883460  0.3773774   2.619 0.008899 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.759 on 1661 degrees of freedom
## Multiple R-squared:  0.6219, Adjusted R-squared:  0.6185 
## F-statistic: 182.1 on 15 and 1661 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST
  • AVG_DEF_ASSIST
  • AVG_OBJ_TIME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_DEATH

Defence

  • Positive Traits
  • AVG_OBJ_TIME
    Defence heroes should stay with tank and support heroes, or stay near for them, as they are direct line of offence for support heroes.
  • AVG_ASSIST / AVG_ATK_ASSIST / AVG_DEF_ASSIST
    Assist of Overwatch cannot be earned by Defensive heroes; as this can be earned by only supporting teammates which is on the offensive or defensive. This should be earned by another heroes, such as Support heroes.
  • Negative Traits
  • AVG_SOLO_KILL
    It is similar with offense heroes, but much more. Defensive heroes have much less dealing capacity than offense heroes.
  • AVG_OBJ_KILL It is similar with offense heroes.
  • AVG_DEATH
    This shows the importance of quick battle-joining for defence, as defence heroes primarily keep tank and support heroes more safe by dealing.

Bastion

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -14.4536  -3.6641  -0.0294   3.9232  13.9544 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.778e+01  3.791e+00   7.327 7.88e-12 ***
## KILL_PER_GAME    1.514e+00  3.342e-01   4.531 1.07e-05 ***
## HEAL_PER_GAME    2.396e+02  1.709e+02   1.402  0.16251    
## DMG_PER_GAME     1.484e-04  4.349e-04   0.341  0.73330    
## AVG_SOLO_KILL   -2.736e+00  8.578e-01  -3.189  0.00169 ** 
## AVG_OBJ_KILL    -1.101e+00  4.544e-01  -2.424  0.01635 *  
## AVG_BLOW         8.504e-01  6.698e-01   1.270  0.20588    
## AVG_ENV_KILL     1.618e+00  4.364e+00   0.371  0.71120    
## AVG_MUL_KILL    -5.416e+00  4.118e+00  -1.315  0.19010    
## AVG_DEATH       -9.052e-01  3.138e-01  -2.885  0.00440 ** 
## AVG_ENV_DEATH    2.410e+00  3.454e+00   0.698  0.48614    
## AVG_FIRE_TIME    3.577e-03  2.306e-02   0.155  0.87690    
## AVG_OBJ_TIME     8.044e-02  4.303e-02   1.869  0.06322 .  
## AVG_HEAL_ASSIST -2.396e+02  1.709e+02  -1.402  0.16251    
## AVG_DEF_ASSIST   1.990e+00  9.452e-01   2.106  0.03662 *  
## AVG_ATK_ASSIST   2.154e-02  1.601e+00   0.013  0.98928    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.856 on 178 degrees of freedom
## Multiple R-squared:  0.5587, Adjusted R-squared:  0.5215 
## F-statistic: 15.02 on 15 and 178 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
    Bastion should not be inside objectives, but stationed in unsuspectible places, for kills. Bastion has consistent and strong basic attack.
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_DEATH
    Much more bigger negative handicap of AVG_DEATH indirectly shows the importance of quick battle-joining. Bastion has a very slow speed of joining, so its handicap is much bigger.

Hanzo

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -32.679  -3.697   0.029   3.465  21.522 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.140e+01  1.676e+00  18.737  < 2e-16 ***
## KILL_PER_GAME    1.889e+00  1.575e-01  11.996  < 2e-16 ***
## HEAL_PER_GAME    4.321e+01  7.164e+01   0.603 0.546561    
## DMG_PER_GAME     1.052e-04  2.376e-04   0.443 0.657990    
## AVG_SOLO_KILL   -2.220e+00  3.568e-01  -6.221 7.80e-10 ***
## AVG_OBJ_KILL    -1.963e+00  2.345e-01  -8.369 2.45e-16 ***
## AVG_BLOW         7.928e-02  2.811e-01   0.282 0.777950    
## AVG_ENV_KILL    -2.692e+00  1.543e+00  -1.745 0.081398 .  
## AVG_MUL_KILL     1.249e-01  1.739e+00   0.072 0.942770    
## AVG_DEATH       -5.217e-01  1.464e-01  -3.563 0.000387 ***
## AVG_ENV_DEATH   -3.621e+00  1.516e+00  -2.389 0.017129 *  
## AVG_FIRE_TIME    1.569e-02  8.989e-03   1.745 0.081342 .  
## AVG_OBJ_TIME     9.247e-02  2.297e-02   4.026 6.19e-05 ***
## AVG_HEAL_ASSIST -4.321e+01  7.164e+01  -0.603 0.546554    
## AVG_DEF_ASSIST   1.456e+00  3.869e-01   3.764 0.000179 ***
## AVG_ATK_ASSIST  -1.446e-01  6.660e-01  -0.217 0.828162    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.643 on 832 degrees of freedom
## Multiple R-squared:  0.5401, Adjusted R-squared:  0.5318 
## F-statistic: 65.13 on 15 and 832 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_OBJ_TIME
    Hanzo should stay in objective, clearing out far enemies before coming too close. Hanzo’s Sonic Arrow can help this.
  • AVG_DEF_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_DEATH

Junkrat

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -26.3723  -3.7835   0.1543   3.8583  19.1249 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.057e+01  1.041e+00  29.362  < 2e-16 ***
## KILL_PER_GAME    1.627e+00  9.680e-02  16.810  < 2e-16 ***
## HEAL_PER_GAME    3.448e+01  4.427e+01   0.779 0.436063    
## DMG_PER_GAME     6.261e-04  1.196e-04   5.237 1.78e-07 ***
## AVG_SOLO_KILL   -1.840e+00  2.572e-01  -7.154 1.12e-12 ***
## AVG_OBJ_KILL    -1.741e+00  1.375e-01 -12.662  < 2e-16 ***
## AVG_BLOW        -1.611e-01  1.809e-01  -0.890 0.373350    
## AVG_ENV_KILL    -1.356e+00  1.137e+00  -1.192 0.233483    
## AVG_MUL_KILL     2.333e+00  1.215e+00   1.919 0.055067 .  
## AVG_DEATH       -4.324e-01  8.474e-02  -5.103 3.61e-07 ***
## AVG_ENV_DEATH   -3.755e+00  1.040e+00  -3.609 0.000313 ***
## AVG_FIRE_TIME    2.522e-02  6.478e-03   3.892 0.000102 ***
## AVG_OBJ_TIME     6.255e-02  1.193e-02   5.242 1.73e-07 ***
## AVG_HEAL_ASSIST -3.448e+01  4.427e+01  -0.779 0.436052    
## AVG_DEF_ASSIST   8.572e-01  2.009e-01   4.267 2.06e-05 ***
## AVG_ATK_ASSIST   1.126e+00  3.307e-01   3.404 0.000675 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.818 on 2374 degrees of freedom
## Multiple R-squared:  0.427,  Adjusted R-squared:  0.4234 
## F-statistic: 117.9 on 15 and 2374 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • DMG_PER_GAME
  • AVG_FIRE_TIME Junkrat is one of the dealers within defence heroes, so it behaves similar with offense heroes.
  • AVG_OBJ_TIME
  • AVG_ATK_ASSIST
  • AVG_DEF_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_DEATH Junkrat’s slow movement speed makes negative handicap of AVG_DEATH, similar to Bastion.
  • AVG_ENV_DEATH But this means that Junkrat has to understand map very throughly, so handicap for environmental deaths exists for Junkrat.

Mei

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -27.0290  -3.4278   0.0959   3.9403  19.1027 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.578e+01  2.097e+00  12.295  < 2e-16 ***
## KILL_PER_GAME    1.998e+00  1.884e-01  10.608  < 2e-16 ***
## HEAL_PER_GAME   -5.268e+01  9.238e+01  -0.570  0.56876    
## DMG_PER_GAME     3.709e-04  2.981e-04   1.244  0.21403    
## AVG_SOLO_KILL   -3.317e+00  5.674e-01  -5.846 8.65e-09 ***
## AVG_OBJ_KILL    -1.903e+00  2.714e-01  -7.014 6.83e-12 ***
## AVG_BLOW         1.870e-01  3.905e-01   0.479  0.63216    
## AVG_ENV_KILL     2.324e+00  2.283e+00   1.018  0.30912    
## AVG_MUL_KILL     4.060e+00  2.375e+00   1.709  0.08797 .  
## AVG_DEATH       -3.686e-01  1.775e-01  -2.076  0.03833 *  
## AVG_ENV_DEATH   -3.013e+00  2.173e+00  -1.387  0.16615    
## AVG_FIRE_TIME    1.046e-02  1.286e-02   0.814  0.41616    
## AVG_OBJ_TIME     6.893e-02  2.208e-02   3.122  0.00189 ** 
## AVG_HEAL_ASSIST  5.268e+01  9.238e+01   0.570  0.56876    
## AVG_DEF_ASSIST   1.995e-01  4.840e-01   0.412  0.68029    
## AVG_ATK_ASSIST   2.068e+00  7.603e-01   2.720  0.00674 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.986 on 549 degrees of freedom
## Multiple R-squared:  0.5359, Adjusted R-squared:  0.5232 
## F-statistic: 42.26 on 15 and 549 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_OBJ_TIME
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL

Torbjörn

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -28.7913  -3.8779   0.4034   4.2498  19.7562 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.220e+01  2.783e+00  11.570  < 2e-16 ***
## KILL_PER_GAME    2.728e-01  2.311e-01   1.180  0.23868    
## HEAL_PER_GAME   -5.485e+01  1.411e+02  -0.389  0.69779    
## DMG_PER_GAME     2.372e-04  3.085e-04   0.769  0.44253    
## AVG_SOLO_KILL   -3.769e+00  7.291e-01  -5.169 4.13e-07 ***
## AVG_OBJ_KILL     4.312e-01  3.603e-01   1.197  0.23227    
## AVG_BLOW         1.072e+00  3.865e-01   2.773  0.00588 ** 
## AVG_ENV_KILL     7.647e-01  3.362e+00   0.227  0.82020    
## AVG_MUL_KILL     8.699e+00  3.525e+00   2.468  0.01411 *  
## AVG_DEATH       -2.861e-02  2.720e-01  -0.105  0.91632    
## AVG_ENV_DEATH   -1.530e+00  3.477e+00  -0.440  0.66022    
## AVG_FIRE_TIME    5.400e-02  1.510e-02   3.577  0.00040 ***
## AVG_OBJ_TIME    -1.909e-02  3.119e-02  -0.612  0.54101    
## AVG_HEAL_ASSIST  5.485e+01  1.411e+02   0.389  0.69779    
## AVG_DEF_ASSIST   8.117e-01  6.509e-01   1.247  0.21325    
## AVG_ATK_ASSIST   1.544e+00  9.516e-01   1.623  0.10563    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.647 on 323 degrees of freedom
## Multiple R-squared:  0.4373, Adjusted R-squared:  0.4112 
## F-statistic: 16.74 on 15 and 323 DF,  p-value: < 2.2e-16
  • Positive Traits
  • AVG_BLOW
    Many players forget that Torbjörn has a very powerful shotgun as a basic attack. It is great for making final blows in short distance.
  • AVG_FIRE_TIME
  • Negative Traits
  • AVG_SOLO_KILL

Widowmaker

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.4695  -3.9962   0.0602   3.8833  16.9222 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.784e+01  2.474e+00  11.255  < 2e-16 ***
## KILL_PER_GAME    1.953e+00  2.593e-01   7.533 3.43e-13 ***
## HEAL_PER_GAME   -6.658e+01  1.147e+02  -0.581    0.562    
## DMG_PER_GAME     3.666e-04  3.611e-04   1.015    0.311    
## AVG_SOLO_KILL   -2.096e+00  4.644e-01  -4.514 8.39e-06 ***
## AVG_OBJ_KILL    -2.161e+00  3.845e-01  -5.621 3.59e-08 ***
## AVG_BLOW         2.129e-02  4.105e-01   0.052    0.959    
## AVG_ENV_KILL    -1.994e+00  2.633e+00  -0.757    0.449    
## AVG_MUL_KILL     2.935e+00  2.864e+00   1.025    0.306    
## AVG_DEATH        5.437e-02  2.128e-01   0.256    0.798    
## AVG_ENV_DEATH   -3.262e+00  2.948e+00  -1.107    0.269    
## AVG_FIRE_TIME    9.575e-03  1.447e-02   0.662    0.509    
## AVG_OBJ_TIME     1.047e-02  3.636e-02   0.288    0.773    
## AVG_HEAL_ASSIST  6.658e+01  1.147e+02   0.581    0.562    
## AVG_DEF_ASSIST   1.190e+00  7.512e-01   1.584    0.114    
## AVG_ATK_ASSIST   1.218e+00  1.033e+00   1.179    0.239    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.205 on 394 degrees of freedom
## Multiple R-squared:  0.5626, Adjusted R-squared:  0.5459 
## F-statistic: 33.78 on 15 and 394 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KIL

Tank

  • Positive Traits
  • KILL_PER_GAME
  • AVG_FIRE_TIME
    Tank heroes can achieve fire time easily by objectives.
  • AVG_OBJ_TIME
    Tank heroes should stay and keep objectives safe.
  • AVG_DEF_ASSIST / AVG_ATK_ASSIST
    Tank heroes should use their skillset for other’s good, such as D.Va’s defensive matrix and Zarya’s Particle Barrier.
  • Negative Traits
  • AVG_SOLO_KILL
    Similar rules apply to Tank heroes. When Tank heores have to make their kills solo, the team itself have some problems.
  • AVG_OBJ_KILL

D.Va

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -23.8525  -4.0107   0.0457   4.0334  24.2245 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.423e+01  1.629e+00  14.877  < 2e-16 ***
## KILL_PER_GAME    1.437e+00  1.388e-01  10.350  < 2e-16 ***
## HEAL_PER_GAME   -4.145e+01  6.617e+01  -0.626  0.53112    
## DMG_PER_GAME     2.067e-04  2.318e-04   0.892  0.37263    
## AVG_SOLO_KILL   -4.637e+00  4.513e-01 -10.275  < 2e-16 ***
## AVG_OBJ_KILL    -1.564e+00  1.964e-01  -7.962 3.86e-15 ***
## AVG_BLOW         1.226e+00  2.662e-01   4.603 4.60e-06 ***
## AVG_ENV_KILL     5.379e+00  1.649e+00   3.262  0.00114 ** 
## AVG_MUL_KILL     3.607e+00  1.972e+00   1.828  0.06772 .  
## AVG_DEATH        2.490e-02  1.260e-01   0.198  0.84343    
## AVG_ENV_DEATH   -4.225e+00  1.704e+00  -2.480  0.01326 *  
## AVG_FIRE_TIME    3.062e-02  9.901e-03   3.093  0.00203 ** 
## AVG_OBJ_TIME     3.124e-02  1.297e-02   2.408  0.01619 *  
## AVG_HEAL_ASSIST  4.145e+01  6.617e+01   0.626  0.53112    
## AVG_DEF_ASSIST   3.433e-01  3.121e-01   1.100  0.27156    
## AVG_ATK_ASSIST   2.069e+00  4.859e-01   4.257 2.23e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.39 on 1209 degrees of freedom
## Multiple R-squared:  0.5418, Adjusted R-squared:  0.5361 
## F-statistic:  95.3 on 15 and 1209 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_BLOW
    D.Va’s Self-Destruct deals with substantial amount of damage. Positive feedback of average death blows means usage of the skillset is important.
  • AVG_ENV_KILL D.Va can also knock off enemies using Boosters. This requires extensive amount of knowledge on playing maps. D.Va players should understand map characteristics and use them for crowd control & kills.
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST

  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL

Reinhardt

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -26.5010  -3.5785  -0.0244   3.5932  27.1710 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     34.2154191  0.8682867  39.406  < 2e-16 ***
## KILL_PER_GAME    1.8860165  0.0842301  22.391  < 2e-16 ***
## HEAL_PER_GAME   -9.6637222 35.1036534  -0.275  0.78311    
## DMG_PER_GAME     0.0001056  0.0001247   0.847  0.39726    
## AVG_SOLO_KILL   -3.2929002  0.2211421 -14.890  < 2e-16 ***
## AVG_OBJ_KILL    -1.8693420  0.1169647 -15.982  < 2e-16 ***
## AVG_BLOW        -0.0889245  0.1408137  -0.632  0.52775    
## AVG_ENV_KILL     0.8112489  0.8327228   0.974  0.33002    
## AVG_MUL_KILL     2.5353197  0.8339189   3.040  0.00238 ** 
## AVG_DEATH       -0.4448348  0.0710431  -6.261 4.26e-10 ***
## AVG_ENV_DEATH   -1.0588796  0.7148474  -1.481  0.13862    
## AVG_FIRE_TIME    0.0304425  0.0046196   6.590 5.04e-11 ***
## AVG_OBJ_TIME     0.0488471  0.0080982   6.032 1.78e-09 ***
## AVG_HEAL_ASSIST  9.6628998 35.1036532   0.275  0.78313    
## AVG_DEF_ASSIST   0.7544764  0.1632775   4.621 3.96e-06 ***
## AVG_ATK_ASSIST   1.0116307  0.2400638   4.214 2.57e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.701 on 3604 degrees of freedom
## Multiple R-squared:  0.5153, Adjusted R-squared:  0.5133 
## F-statistic: 255.4 on 15 and 3604 DF,  p-value: < 2.2e-16
  • Positive Traits
  • AVG_MUL_KILL
    Reinhardt has the skill Earthshattter, which can stun & eliminate multiple enemies at once. This skill is one of the handful of wide-ranged attacks, and deal amount itself is not so good, so combination between skillsets is necessary.
  • AVG_FIRE_TIME
  • AVG_OBJ_TIME
  • AVG_DEF_ASSIST
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_DEATH
    Similar to Bastion, Reinhardt’s battle-joining speed is very slow compared to other heroes. Reinhardt should use use the Barrier Field to stay safe.

Roadhog

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -21.0271  -3.8302  -0.0362   3.6573  23.0693 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.732e+01  1.089e+00  25.092  < 2e-16 ***
## KILL_PER_GAME    2.000e+00  8.801e-02  22.723  < 2e-16 ***
## HEAL_PER_GAME    7.267e+01  3.803e+01   1.911 0.056107 .  
## DMG_PER_GAME     1.057e-04  1.141e-04   0.926 0.354380    
## AVG_SOLO_KILL   -2.404e+00  1.997e-01 -12.039  < 2e-16 ***
## AVG_OBJ_KILL    -2.300e+00  1.270e-01 -18.119  < 2e-16 ***
## AVG_BLOW        -1.218e-02  1.391e-01  -0.088 0.930235    
## AVG_ENV_KILL    -2.851e+00  9.570e-01  -2.979 0.002916 ** 
## AVG_MUL_KILL     4.446e+00  1.004e+00   4.428 9.85e-06 ***
## AVG_DEATH       -5.144e-02  7.952e-02  -0.647 0.517725    
## AVG_ENV_DEATH   -3.097e+00  8.564e-01  -3.617 0.000303 ***
## AVG_FIRE_TIME    1.400e-02  4.614e-03   3.034 0.002434 ** 
## AVG_OBJ_TIME     8.092e-02  1.132e-02   7.149 1.09e-12 ***
## AVG_HEAL_ASSIST -7.267e+01  3.803e+01  -1.911 0.056105 .  
## AVG_DEF_ASSIST   9.518e-01  1.595e-01   5.969 2.67e-09 ***
## AVG_ATK_ASSIST   9.532e-01  2.836e-01   3.361 0.000786 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.786 on 3056 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.5394, Adjusted R-squared:  0.5371 
## F-statistic: 238.6 on 15 and 3056 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_MUL_KILL
    Similar to Roadhog also has crowd-control skills, namely Whole Hog, which can stun & eliminate multiple enemies at once. Effective usage of this skill is required.
  • AVG_FIRE_TIME
  • AVG_DEF_ASSIST
  • AVG_ATK_ASSIST
  • AVG_OBJ_TIME
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_DEATH

Winston

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.6975  -3.4468  -0.1502   3.3839  19.3258 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.284e+01  2.317e+00  14.172  < 2e-16 ***
## KILL_PER_GAME    1.699e+00  1.719e-01   9.882  < 2e-16 ***
## HEAL_PER_GAME    4.388e+01  9.367e+01   0.468  0.63968    
## DMG_PER_GAME     3.819e-04  3.276e-04   1.166  0.24432    
## AVG_SOLO_KILL   -1.140e+00  6.018e-01  -1.895  0.05878 .  
## AVG_OBJ_KILL    -1.767e+00  3.093e-01  -5.714    2e-08 ***
## AVG_BLOW        -7.050e-01  3.687e-01  -1.912  0.05649 .  
## AVG_ENV_KILL     1.006e+00  1.644e+00   0.612  0.54107    
## AVG_MUL_KILL     2.454e+00  2.514e+00   0.976  0.32939    
## AVG_DEATH       -4.595e-01  1.793e-01  -2.563  0.01070 *  
## AVG_ENV_DEATH   -4.683e+00  2.109e+00  -2.220  0.02689 *  
## AVG_FIRE_TIME    3.287e-02  1.259e-02   2.612  0.00931 ** 
## AVG_OBJ_TIME     6.546e-02  2.574e-02   2.543  0.01132 *  
## AVG_HEAL_ASSIST -4.388e+01  9.367e+01  -0.468  0.63968    
## AVG_DEF_ASSIST  -1.388e-01  4.338e-01  -0.320  0.74924    
## AVG_ATK_ASSIST   1.580e+00  6.018e-01   2.625  0.00896 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.41 on 453 degrees of freedom
## Multiple R-squared:  0.5228, Adjusted R-squared:  0.507 
## F-statistic: 33.09 on 15 and 453 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • AVG_FIRE_TIME
  • AVG_ATK_ASSIST
    No objective time for Winston means Winston should not be in objectives, but sneakily move around maps for low-health enemies.
  • Negative Traits
  • AVG_OBJ_KILL

Zarya

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -21.3278  -3.8780  -0.0658   3.7484  20.6259 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     31.8772056  0.9771032  32.624  < 2e-16 ***
## KILL_PER_GAME    1.6910620  0.0761730  22.200  < 2e-16 ***
## HEAL_PER_GAME    9.9762921 36.0730488   0.277 0.782135    
## DMG_PER_GAME     0.0003101  0.0001156   2.682 0.007356 ** 
## AVG_SOLO_KILL   -3.8564416  0.2438406 -15.815  < 2e-16 ***
## AVG_OBJ_KILL    -2.0531091  0.1099082 -18.680  < 2e-16 ***
## AVG_BLOW         0.5246784  0.1437593   3.650 0.000266 ***
## AVG_ENV_KILL    -0.6090170  1.0065786  -0.605 0.545193    
## AVG_MUL_KILL    -0.9260956  0.7130156  -1.299 0.194081    
## AVG_DEATH       -0.1403137  0.0761163  -1.843 0.065351 .  
## AVG_ENV_DEATH   -3.2682107  0.9272901  -3.524 0.000430 ***
## AVG_FIRE_TIME    0.0272562  0.0049926   5.459 5.10e-08 ***
## AVG_OBJ_TIME     0.0401874  0.0096648   4.158 3.28e-05 ***
## AVG_HEAL_ASSIST -9.9766039 36.0730489  -0.277 0.782129    
## AVG_DEF_ASSIST   0.6661185  0.1695365   3.929 8.69e-05 ***
## AVG_ATK_ASSIST   1.2459405  0.2532035   4.921 9.01e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.916 on 3612 degrees of freedom
## Multiple R-squared:  0.5388, Adjusted R-squared:  0.5369 
## F-statistic: 281.3 on 15 and 3612 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • DMG_PER_GAME
  • AVG_BLOW
    Zarya has skill Particle Cannon for line of fire or alternatively bigger dealing. Sighting and hitting the opponent with explosive charge is important.
  • AVG_FIRE_TIME
  • AVG_OBJ_TIME
  • AVG_ATK_ASSIST
  • AVG_DEF_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_DEATH

Support

  • Positive Traits
  • AVG_MUL_KILL
    Particulary, Multi Kills helped Support heroes a lot of ratings, even though they do not have enough fire power for it.
  • AVG_ATK_ASSIST
    There are some skills that Support heroes have, like Ana’s Nano Boost or Mercy’s Caduceus Staff. Hence it is sensional that Support heroes have to assist attacks.
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KIL

Ana

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13.1705  -4.0035  -0.5302   2.7881  17.5385 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      1.898e+01  6.460e+00   2.938  0.00427 ** 
## KILL_PER_GAME    1.343e+00  7.964e-01   1.686  0.09556 .  
## HEAL_PER_GAME    3.270e+02  2.385e+02   1.371  0.17410    
## DMG_PER_GAME     9.182e-04  9.536e-04   0.963  0.33841    
## AVG_SOLO_KILL   -5.543e+00  1.914e+00  -2.896  0.00483 ** 
## AVG_OBJ_KILL    -2.269e+00  1.141e+00  -1.989  0.05002 .  
## AVG_BLOW         2.323e+00  1.367e+00   1.699  0.09311 .  
## AVG_ENV_KILL    -1.966e+00  8.626e+00  -0.228  0.82023    
## AVG_MUL_KILL     9.485e+00  7.645e+00   1.241  0.21825    
## AVG_DEATH       -7.057e-01  5.308e-01  -1.330  0.18732    
## AVG_ENV_DEATH   -4.673e+00  6.095e+00  -0.767  0.44544    
## AVG_FIRE_TIME   -1.378e-02  3.654e-02  -0.377  0.70709    
## AVG_OBJ_TIME     1.487e-01  7.713e-02   1.928  0.05726 .  
## AVG_HEAL_ASSIST -3.270e+02  2.385e+02  -1.371  0.17410    
## AVG_DEF_ASSIST   2.308e-01  6.962e-01   0.332  0.74108    
## AVG_ATK_ASSIST   3.936e+00  8.323e-01   4.729 9.12e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.954 on 83 degrees of freedom
## Multiple R-squared:  0.7636, Adjusted R-squared:  0.7208 
## F-statistic: 17.87 on 15 and 83 DF,  p-value: < 2.2e-16
  • Positive Traits
  • AVG_ATK_ASSIST Ana’s skill Nano Boost usage is important for playing Ana.
  • Negative Traits
  • AVG_SOLO_KILL

Lúcio

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -24.1800  -3.6643   0.0166   3.5596  22.0515 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.198e+01  7.436e-01  43.001  < 2e-16 ***
## KILL_PER_GAME    1.454e+00  7.255e-02  20.041  < 2e-16 ***
## HEAL_PER_GAME   -2.929e+01  2.884e+01  -1.016  0.30984    
## DMG_PER_GAME     3.576e-04  1.129e-04   3.168  0.00154 ** 
## AVG_SOLO_KILL   -3.808e+00  2.505e-01 -15.204  < 2e-16 ***
## AVG_OBJ_KILL    -1.757e+00  1.052e-01 -16.705  < 2e-16 ***
## AVG_BLOW         8.342e-01  1.322e-01   6.310 3.01e-10 ***
## AVG_ENV_KILL    -1.431e+00  5.060e-01  -2.828  0.00470 ** 
## AVG_MUL_KILL     5.919e+00  9.505e-01   6.228 5.10e-10 ***
## AVG_DEATH       -6.908e-01  5.907e-02 -11.695  < 2e-16 ***
## AVG_ENV_DEATH   -1.324e+00  7.082e-01  -1.870  0.06160 .  
## AVG_FIRE_TIME    1.197e-02  2.867e-03   4.177 3.00e-05 ***
## AVG_OBJ_TIME     6.344e-02  6.407e-03   9.903  < 2e-16 ***
## AVG_HEAL_ASSIST  2.929e+01  2.884e+01   1.016  0.30984    
## AVG_DEF_ASSIST   8.629e-01  6.885e-02  12.533  < 2e-16 ***
## AVG_ATK_ASSIST   1.191e+00  9.513e-02  12.523  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.755 on 5274 degrees of freedom
## Multiple R-squared:  0.5147, Adjusted R-squared:  0.5133 
## F-statistic: 372.9 on 15 and 5274 DF,  p-value: < 2.2e-16
  • Positive Traits
  • KILL_PER_GAME
  • DMG_PER_GAME
  • AVG_BLOW
  • AVG_MUL_KILL
    Lúcio is the most attack-oriented hero in Support heroes. This is why those traits come up for Lúcio.
  • AVG_FIRE_TIME
  • AVG_OBJ_TIME
  • AVG_DEF_ASSIST
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_ENV_KILL
  • AVG_DEATH
    Big handicap even though fast battle-joining is because Lúcio should be alive among teammates to heal constantly.

Mercy

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.459  -3.700  -0.082   3.633  23.447 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.369e+01  8.280e-01  40.688  < 2e-16 ***
## KILL_PER_GAME    2.195e+00  9.043e-02  24.269  < 2e-16 ***
## HEAL_PER_GAME    7.679e+00  3.157e+01   0.243  0.80784    
## DMG_PER_GAME     6.049e-05  1.473e-04   0.411  0.68137    
## AVG_SOLO_KILL   -4.037e+00  3.115e-01 -12.958  < 2e-16 ***
## AVG_OBJ_KILL    -2.517e+00  1.462e-01 -17.215  < 2e-16 ***
## AVG_BLOW         3.128e-01  1.664e-01   1.880  0.06021 .  
## AVG_ENV_KILL     1.414e+00  7.822e-01   1.807  0.07077 .  
## AVG_MUL_KILL     5.916e+00  1.132e+00   5.226 1.81e-07 ***
## AVG_DEATH       -7.540e-01  6.985e-02 -10.795  < 2e-16 ***
## AVG_ENV_DEATH   -2.472e+00  8.959e-01  -2.759  0.00582 ** 
## AVG_FIRE_TIME    1.614e-02  3.228e-03   4.998 6.02e-07 ***
## AVG_OBJ_TIME     3.925e-02  8.937e-03   4.392 1.15e-05 ***
## AVG_HEAL_ASSIST -7.679e+00  3.157e+01  -0.243  0.80784    
## AVG_DEF_ASSIST   8.079e-01  4.804e-02  16.817  < 2e-16 ***
## AVG_ATK_ASSIST   5.836e-01  4.140e-02  14.097  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.752 on 4338 degrees of freedom
## Multiple R-squared:  0.5203, Adjusted R-squared:  0.5186 
## F-statistic: 313.7 on 15 and 4338 DF,  p-value: < 2.2e-16
  • Positive Traits
  • AVG_MUL_KILL
  • AVG_FIRE_TIME
  • AVG_OBJ_TIME
  • AVG_DEF_ASSIST
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_DEATH
  • AVG_ENV_DEATH Just like Lúcio, Mercy too suffer big handicaps. Moreover, Mercy can fly for a short amount of time by Angelic Descent, so it is prone to environmental deaths.

Symmetra

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.7636  -2.9831   0.2313   2.8918  17.6192 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.917e+01  4.094e+00   9.569  < 2e-16 ***
## KILL_PER_GAME    8.113e-01  3.629e-01   2.236  0.02698 *  
## HEAL_PER_GAME    9.575e+01  1.747e+02   0.548  0.58455    
## DMG_PER_GAME     2.596e-04  6.760e-04   0.384  0.70157    
## AVG_SOLO_KILL   -4.895e+00  1.208e+00  -4.051 8.46e-05 ***
## AVG_OBJ_KILL    -1.792e+00  6.617e-01  -2.709  0.00760 ** 
## AVG_BLOW         1.834e+00  7.824e-01   2.344  0.02050 *  
## AVG_ENV_KILL    -3.652e+00  4.745e+00  -0.770  0.44291    
## AVG_MUL_KILL     1.604e+01  5.578e+00   2.877  0.00466 ** 
## AVG_DEATH       -2.448e-01  3.378e-01  -0.725  0.46985    
## AVG_ENV_DEATH   -7.929e+00  4.317e+00  -1.836  0.06844 .  
## AVG_FIRE_TIME    2.739e-02  2.438e-02   1.123  0.26325    
## AVG_OBJ_TIME     4.996e-02  4.951e-02   1.009  0.31468    
## AVG_HEAL_ASSIST -9.575e+01  1.747e+02  -0.548  0.58456    
## AVG_DEF_ASSIST  -1.274e+00  9.348e-01  -1.362  0.17529    
## AVG_ATK_ASSIST   1.351e+00  1.235e+00   1.094  0.27600    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.851 on 138 degrees of freedom
## Multiple R-squared:  0.3854, Adjusted R-squared:  0.3186 
## F-statistic: 5.769 on 15 and 138 DF,  p-value: 4.148e-09
  • Positive Traits
  • AVG_MUL_KILL
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KIL

Zenyatta

## 
## Call:
## lm(formula = RATING ~ ., data = dat_each)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -14.6835  -4.0959  -0.4539   3.8591  20.8524 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.807e+01  3.097e+00   9.065  < 2e-16 ***
## KILL_PER_GAME    1.659e+00  2.823e-01   5.877 8.58e-09 ***
## HEAL_PER_GAME   -4.132e+01  1.178e+02  -0.351  0.72597    
## DMG_PER_GAME     6.856e-04  4.148e-04   1.653  0.09909 .  
## AVG_SOLO_KILL   -4.286e+00  8.728e-01  -4.911 1.31e-06 ***
## AVG_OBJ_KILL    -3.045e+00  4.059e-01  -7.501 3.90e-13 ***
## AVG_BLOW         1.164e+00  5.141e-01   2.264  0.02408 *  
## AVG_ENV_KILL     3.620e+00  2.680e+00   1.351  0.17747    
## AVG_MUL_KILL     1.881e+01  3.814e+00   4.933 1.18e-06 ***
## AVG_DEATH       -7.737e-01  2.505e-01  -3.088  0.00215 ** 
## AVG_ENV_DEATH    8.968e-02  3.127e+00   0.029  0.97713    
## AVG_FIRE_TIME   -1.448e-02  1.151e-02  -1.258  0.20908    
## AVG_OBJ_TIME     1.284e-01  3.142e-02   4.087 5.24e-05 ***
## AVG_HEAL_ASSIST  4.133e+01  1.178e+02   0.351  0.72597    
## AVG_DEF_ASSIST   1.398e-01  3.164e-01   0.442  0.65886    
## AVG_ATK_ASSIST   1.884e+00  4.312e-01   4.369 1.58e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.439 on 414 degrees of freedom
## Multiple R-squared:  0.5954, Adjusted R-squared:  0.5807 
## F-statistic: 40.61 on 15 and 414 DF,  p-value: < 2.2e-16
  • Positive Traits
  • AVG_MUL_KILL
  • AVG_FIRE_TIME
  • AVG_OBJ_TIME
  • AVG_ATK_ASSIST
  • Negative Traits
  • AVG_SOLO_KILL
  • AVG_OBJ_KILL
  • AVG_DEATH

Coefficient Assemble!

Gather up meaningful coefficients per game. These stats does meaningful amount of difference into play ratings.

hero_coef_df <- data.frame()

for (hero in c(hero_atk, hero_def, hero_tank, hero_heal)) {
  dat_each <- dat %>%
    filter(BEST_HERO == hero) %>%
      transmute(KILL_PER_GAME,
                HEAL_PER_GAME,
                DMG_PER_GAME,
                AVG_SOLO_KILL = TOT_SOLO_KILL / TOT_GAME,
                AVG_OBJ_KILL = TOT_OBJ_KILL / TOT_GAME,
                AVG_BLOW = TOT_BLOW / TOT_GAME,
                AVG_ENV_KILL = TOT_ENV_KILL / TOT_GAME,
                AVG_MUL_KILL = TOT_MUL_KILL / TOT_GAME,
                AVG_DEATH = TOT_DEATH / TOT_GAME,
                AVG_ENV_DEATH = TOT_ENV_DEATH / TOT_GAME,
                AVG_FIRE_TIME = TOT_FIRE_TIME / TOT_GAME,
                AVG_OBJ_TIME = TOT_OBJ_TIME / TOT_GAME,
                AVG_HEAL_ASSIST = TOT_HEAL_ASSIST / TOT_GAME,
                AVG_DEF_ASSIST = TOT_DEF_ASSIST / TOT_GAME,
                AVG_ATK_ASSIST = TOT_ATK_ASSIST / TOT_GAME,
                RATING)
  
  hero_lm = lm(RATING ~ ., data = dat_each)
  df_name <- data.frame(names(coef(hero_lm)))
  coef_df <- data.frame(coef(summary(hero_lm)))
  for(i in 2:length(coef(hero_lm))) {
    if(coef_df[4][i,] < 0.01) {
      hero_coef_df[hero, toString(df_name[i,])] = coef_df[1][i,]
    }
  }
  hero_coef_df[hero, "BEST_HERO"] = hero
}

Kills

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(KILL_PER_GAME)) %>%
  ggplot(aes(x=reorder(BEST_HERO, KILL_PER_GAME), y=KILL_PER_GAME, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Kill') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Naturally, support and tank heroes has a relatively low impact on kills, but Mercy has a large amount of increasement; stating Mercy’s Caduceus blaster can be very lethal and used effectively when dealing. But mostly, Kills does help for rating to go up.

Damages

Damages are more for low-dealing offense heroes, like Tracer, McCree or Genji. Moreover, Lúcio and Zarya should deal more for higher rating; even they are not defence or offense heroes. Lúcio should cope with slow bullet speed of Sonic Amplifier, and Zarya too should cope with Particle Cannon explosive charges.

Solo Kills

## Warning: Stacking not well defined when ymin != 0

Solo kills normally means hero has encountered one-to-one situation, and the hero got some blows from the opponent. Health packs are a rarity. So it has a negative impact on ratings. Support heroes suffers the most, whereas long distance Defense heroes or short distance offense heroes suffers lesser.

Objective Kills

## Warning: Stacking not well defined when ymin != 0

Also, Objective Kills are earned when objectives are in danger, so it has a negative impact on ratings too. Offense heroes should not be in the objective, but in the front line, so Offense heroes suffer the most, and Tank heroes suffers more less.

Death Blows

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_BLOW)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_BLOW), y=AVG_BLOW, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Death Blows') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Environmental Kills

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_ENV_KILL)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_ENV_KILL), y=AVG_ENV_KILL, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Environmental Kill') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0

This shows that Environmental Kills by D.Va, using Boosters can be very helpful, but Roadhog’s Chain Hooks or Lúcio’s Sonic Amplifier can be not useful in many maps with some exceptions, like Illios.

Multi Kills

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_MUL_KILL)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_MUL_KILL), y=AVG_MUL_KILL, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Multi Kill') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Except lower three heroes, four Support heroes do not have any wide-ranged deals. This can be showing the significance of basic weapons that they have.

Deaths

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_DEATH)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_DEATH), y=AVG_DEATH, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Death') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0

Except from McCree, as discussed above, Deaths have a negative impacts on slow heroes or healing heroes. It is because of slow battle-joining speed, discussed multiple times above.

Environmental Deaths

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_ENV_DEATH)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_ENV_DEATH), y=AVG_ENV_DEATH, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Environmental Death') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0

Environmental Deaths have a negative blow on heroes that have to place themselves strategically, like Roadhog or Junkrat, or have high mobility, like Mercy or Tracer. These heroes especially need extensive map understanding.

Fire Time

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_FIRE_TIME)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_FIRE_TIME), y=AVG_FIRE_TIME, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Fire Time (sec)') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Blizzard’s Fire Time system can be too Tank-oriented; as they increase a lot by same fire time.

Objective Time

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_OBJ_TIME)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_OBJ_TIME), y=AVG_OBJ_TIME, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Objective Time (sec)') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Offense heroes, especially Tracer, Genji, and Hanzo have to contribute on the objective itself. Also Soldier: 76 or Pharah & Mercy Objective Team can be great for winning.

Defensive Assists

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_DEF_ASSIST)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_DEF_ASSIST), y=AVG_DEF_ASSIST, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Defensive Assists') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")

Offensive Assists

hero_coef_df %>%
  mutate(BEST_HERO_CLASS =
           ifelse(BEST_HERO %in% hero_atk, "Offense",
                  ifelse(BEST_HERO %in% hero_def, "Defence",
                         ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
  subset(!is.na(AVG_ATK_ASSIST)) %>%
  ggplot(aes(x=reorder(BEST_HERO, AVG_ATK_ASSIST), y=AVG_ATK_ASSIST, fill=BEST_HERO_CLASS)) +
  ggtitle('Rating Increasement per Offensive Assists') +
  geom_bar(stat='identity') +
  coord_flip() +
  xlab("Hero Chosen") +
  ylab("Coefficient")